AWS IAM Identity Center のアクセス許可セットで IP アドレス制限を設定する

AWS IAM Identity Center のアクセス許可セットで IP アドレス制限を設定する

Clock Icon2023.07.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS IAM Identity Center のアクセス許可セットのインラインポリシーを利用して、IP アドレス制限を設定する方法を紹介します。

外部 ID プロバイダーと認証連携している場合は、外部 ID プロバイダーの機能で IP アドレス制限を実施できる場合があります。本ブログでは、cと認証連携していない場合や、外部 ID プロバイダー側で IP アドレス制限を設定できない場合などを想定して AWS IAM Identity Center で IP アドレス制限を実現してみます。


なお、外部 ID プロバイダーで IP アドレス制限を実施することで AWS アクセスポータルにアクセスする前にブロックできます。例えば、Azure AD では条件付きアクセス機能で AWS アクセスポータルへのアクセスを IP アドレスで制限できます。下記ブログでは AWS IAM Identity Center にアクセスするエンタープライズアプリケーションに条件付きアクセスを設定しています。

アクセス許可セットで IP アドレス制限

アクセス許可セットでの IP アドレス制限は IAM ポリシーと同様の方法と実現できます。今回は、IAM ポリシーのユーザーガイドを参考に設定してみます。

AWS: 送信元 IP に基づいて AWS へのアクセスを拒否する - AWS Identity and Access Management


IP アドレス制限のポリシー例

IP アドレス192.0.2.1/32からのアクセスを許可する例です。次のポリシーをアクセス許可セットのインラインポリシーに設定することが IP アドレス制限の実現方法の 1 つです。

{
	"Version": "2012-10-17",
	"Statement": {
		"Effect": "Deny",
		"Action": "*",
		"Resource": "*",
		"Condition": {
			"NotIpAddress": {
				"aws:SourceIp": [
					"192.0.2.1/32"
				]
			},
			"Bool": {
				"aws:ViaAWSService": "false"
			},
			"StringNotLike": {
				"aws:userAgent": "*aws-cli*"
			}
		}
	}
}

Condition の 14 行目は AWS サービスから操作される場合を除外しています。一部の操作はユーザーのが利用している IP アドレスではなく、AWS のサービス経由で実行されるためです。

Condition の 16 行目は AWS CloudShell を利用できるようにする設定です。上述したユーザーガイドに注記がありますが、AWS CloudShell から発生した API リクエストはユーザーの利用している IP アドレスと AWS のサービス経由のどちらでもないため、除外しています。


アクセス許可セットの設定

アクセス許可セットの設定例です。AWS マネージドポリシーで AdministratorAccess 権限を選択するのに加えて、インラインポリシー に上述した IP アドレス制限のポリシーを設定します。

本設定で作成したアクセス許可セットを関連付けたユーザーで指定した192.0.2.1/32以外の IP アドレスから AWS アカウントにアクセスした場合は、次のようにアカウントにアクセスはできますが、権限がない状態にできます。下記画像は EC2 のマネジメントコンソールの表示例です。

別の例として AWS IAM Identity Center にアクセスしたときの画面です。

次に、指定した IP アドレス192.0.2.1/32からアクセスすると、EC2 のマネジメントコンソールはエラーなく表示されました。

AWS CloudShell も実行できました。

$ aws sso-admin list-instances
{
    "Instances": [
        {
            "InstanceArn": "arn:aws:sso:::instance/ssoins-7758507c6example",
            "IdentityStoreId": "d-xxxxxxxxxx"
        }
    ]
}

IP アドレス制限が実現できていることを確認できました。


AWS CloudShell を除外しない場合

試しに AWS CloudShell を除外しない場合の下記ポリシーでも確認してみます。

{
	"Version": "2012-10-17",
	"Statement": {
		"Effect": "Deny",
		"Action": "*",
		"Resource": "*",
		"Condition": {
			"NotIpAddress": {
				"aws:SourceIp": [
					"192.0.2.1/32"
				]
			},
			"Bool": {
				"aws:ViaAWSService": "false"
			}
		}
	}
}


許可している IP アドレス192.0.2.1/32からアクセスした場合においても、次のように AWS CloudShell から実行できませんでした。

$ aws sso-admin list-instances

An error occurred (AccessDeniedException) when calling the ListInstances operation: User: arn:aws:sts::111122223333:assumed-role/AWSReservedSSO_AdministratorAccess_067748c8cexample/test-user is not authorized to perform: sso:ListInstances with an explicit deny in an identity-based policy

さいごに

AWS IAM Identity Center のアクセス許可セットで IP アドレス制限を実施する方法を紹介しました。IAM サービスで実現するのとほぼ同じ方法で実現できました。

以上、このブログがどなたかのご参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.